package common.utils;


import common.utils.entity.RequestBaseTableEntity;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * <p>自定义分页插件</p>
 *@author zwy
 *@date 2025/3/9 18:01
*/

public class GetPageUtils {

    /**
     * 查询列表数据
     * 请求参数 Map<String, Object>
     * 返回对象为List<Map<String, Object>>
     *
     * @param params
     * @param resultList
     * @param totalCount
     * @return
     */
  /*  public static RTableData<List<Map<String, Object>>> getList(Map<String, Object> params, List<Map<String, Object>> resultList, int totalCount) {
        //当前页码
        int currPage = Integer.parseInt(params.get(Constants.PAGE).toString());
        //每页大小
        int limit = Integer.parseInt(params.get(Constants.LIMIT).toString());
        //排序 asc升序 desc降序 转小写
        String order = params.get(Constants.ORDER).toString().toLowerCase();
        //自动生成序号 字段:iid
        if (resultList != null && resultList.size() > 0) {
            for (int i = 0; i < resultList.size(); i++) {
                resultList.get(i).put("iid", "asc".equals(order) ? limit * (currPage - 1) + i + 1 : totalCount - (limit * (currPage - 1)) - i);
            }
        }
        return RTableData.ok(resultList, totalCount);
    }*/

    /**
     * 查询列表数据
     * 请求参数 实体entity
     * 返回对象为List<entity>
     *
     * @param params
     * @param resultList
     * @param totalCount
     * @return
     */
//    public static RTableDataInfo<List<Map<String, Object>>> getPageUtils2(String page1, String limit1, String order1, List<Map<String, Object>> resultList, int totalCount) {
//        //当前页码
//        int currPage = Integer.parseInt(params.get(Constants.PAGE).toString());
//        //每页大小
//        int limit = Integer.parseInt(params.get(Constants.LIMIT).toString());
//        //排序 asc升序 desc降序 转小写
//        String order = params.get(Constants.ORDER).toString().toLowerCase();
//        //自动生成序号 字段:iid
//        if (resultList != null && resultList.size() > 0) {
//            for (int i = 0; i < resultList.size(); i++) {
//                resultList.get(i).put("iid", "asc".equals(order) ? limit * (currPage - 1) + i + 1 : totalCount - (limit * (currPage - 1)) - i);
//            }
//        }
//        return RTableDataInfo.getDataTable(resultList, totalCount);
//    }

    /**
     * 格式化分页数据  请求参数 Map<String, Object>
     *
     * @param params
     * @return
     */
    public static Map<String, Object> paramsMap(Map<String, Object> params) {
        //当前页码
        int page = Integer.parseInt(params.get("page").toString());
        //每页大小
        int limit = Integer.parseInt(params.get("limit").toString());
        // page从1开始 ,计算好的,sql直接直接使用
        params.put("page", Integer.parseInt(String.valueOf(page)));
        if (page >= 1) {
            page = page - 1;
        } else {
            page = 0;
        }
        params.put("mypage", Integer.parseInt(String.valueOf(page * limit)));
        params.put("limit", Integer.parseInt(String.valueOf(limit)));
        return params;
    }

    /**
     * 格式化分页数据  请求参数 实体
     *
     * @param page1  页码
     * @param limit1 条数
     * @param order1 排序
     * @return
     */
    public static RequestBaseTableEntity paramsEntity(String page1, String limit1, String order1) {
        //当前页码
        int page = Integer.parseInt(page1);
        //每页大小
        int limit = Integer.parseInt(limit1);
        // page从1开始 ,计算好的,sql直接直接使用
        if (page >= 1) {
            page = page - 1;
        } else {
            page = 0;
        }
        RequestBaseTableEntity requestBaseTableEntity = new RequestBaseTableEntity();
        requestBaseTableEntity.setMypage(page * limit);
        requestBaseTableEntity.setLimit(limit);
        requestBaseTableEntity.setPage(page);
        return requestBaseTableEntity;
    }

    /**
     * 分页处理 根据limit 处理每页显示个数 page-页码  limit-每页大小  resultList-总数据
     *
     * @param page       从0开始
     * @param limit
     * @param resultList
     * @return
     */
    public static List<?> pagingList(int page, int limit, List<?> resultList) {
        List<?> pageList = new ArrayList<>();
        if (page * limit < resultList.size()) {
            //((page + 1) * limit) < resultList.size() ? (page + 1) * limit : resultList.size()
            // Math.min(((page + 1) * limit), resultList.size())
            pageList = resultList.subList(page * limit, Math.min(((page + 1) * limit), resultList.size()));
        }
        System.out.println("分页后==" + pageList);
        return pageList;
    }

    /**
     * 分页处理 根据limit 处理每页显示个数 page-页码  limit-每页大小  resultList-总数据
     *
     * @param page       从1开始
     * @param limit
     * @param resultList
     * @return
     */
    public static List<?> pagingList2(int page, int limit, List<?> resultList) {
        List<?> pageList = new ArrayList<>();
        if ((page - 1) * limit < resultList.size()) {
            //(page * limit) < resultList.size() ? page * limit : resultList.size()
            pageList = resultList.subList((page - 1) * limit, Math.min((page * limit), resultList.size()));
        }
        System.out.println("分页后==" + pageList);
        return pageList;
    }
}
